<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Transactions : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 2.0.3</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->



<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
<a href="index.html">Database Library</a> &nbsp;&#8250;&nbsp;
Transactions
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->


<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>트랜잭션(Transactions)</h1>

<p>CodeIgniter는 트랜잭션을 지원하는 데이터베이스를 사용할때 트랜잭션을 사용하도록 지원합니다.   MySQL 을 사용하신다면 , 일반적인 MyISAM 보다는  InnoDB 나 BDB 를 사용하셔야 트랜잭션기능을 이용할수 있습니다.대부분의 다른 데이터베이스 시스템들은 기본적으로 내장된 트랜잭션기능이 있습니다.</p>

<p>트랜잭션에 익숙하지 않으시다면 인터넷에서 사용하시는 데이터베이스의 트랜잭션에 대한 정보를 먼저 찾아보세요. 지금 부터 제공하는 정보는 당신이 트랜잭션에 대해 어느정도 알고있다고 가정하고 있습니다.</p>

<h2>CodeIgniter 의 트랜잭션 접근법</h2>

<p>CodeIgniter 의 트랜잭션 접근법은 유명한 데이터베이스 클래스인 ADODB와 매우 유사합니다. 우리가 이 접근법을 사용한 이유는 그 클래스가 트랜잭션을 실행과정을 대단히 단순화 하기 때문입니다. 대부분의 경우에 겨우 2줄정도의 코드가 필요합니다.</p>

<p>전통적인 방법에 있어서는 트랜잭션을 사용하기위해서 해야할일이 많습니다. 쿼리의 결과에 따라 커밋 할지 롤벡할지를 결정하기 위해서  계속 쿼리를 추적해야하기 때문입니다 .여러쿼리를 동시에 실행해야할때 이건 정말 귀찮은 일이죠 . 이에반해, 우리는 이 모든것을 자동으로 수행해줄 똑똑한 트랜잭션 시스템을 만들었습니다.(물론 여러분이 직접 트랜잭션을 수동으로 처리할수도 있지만, 그럴필요가 전혀 없습니다).</p>

<h2>트랜잭션의 실행 Running Transactions</h2>

<p>트랜잭션을 이용하여 쿼리를 실행하려면 <dfn>$this->db->trans_start()</dfn> 함수와 <dfn>$this->db->trans_complete()</dfn> 함수를 아래와같이 사용합니다:</p>

<code>
<kbd>$this->db->trans_start();</kbd><br />
$this->db->query('AN SQL QUERY...');<br />
$this->db->query('ANOTHER QUERY...');<br />
$this->db->query('AND YET ANOTHER QUERY...');<br />
<kbd>$this->db->trans_complete();</kbd>
</code>

<p>start/complete 함수사이에 원하는 수 만큼의 쿼리를 실행하면 전체의 성공여부에따라 함수들이 알아서 커밋 혹은 롤백을 수행합니다.</p>


<h2>완벽모드 Strict Mode</h2>

<p>기본적으로 CodeIgniter 는 트랜잭션을 <dfn>완벽모드(Strict Mode</dfn>)로 실행합니다. 완벽모드가 활성화된 상태에서는 여러그룹의 트랜잭션을 실행했을때 단하나라도 실패하게되면 전체는 롤백됩니다. 만약 완벽모드가 비활성화라면, 여러그룹의 트랜잭션을 실행했을때 각각의 그룹은 독립적으로 실행되기때문에 각 그룹내에서만 성공여부에따라서 커밋,롤백 하게 됩니다. 즉 그룹간에는 서로 영향이 없습니다.</p>

<p>완벽모드는 아래와같은 방법으로 비활성화 시킬수 있습니다:</p>

<code>$this->db->trans_strict(FALSE);</code>


<h2>관리에러 Managing Errors</h2>

<p>만약 <dfn>config/database.php</dfn> 파일에서 에러리포팅을 활성화 시켜두었다면, 커밋이 실피했을때 표준 에러메세지를 출력합니다. 만약 디버깅이 off 상태라면, 아래와같이 수동으로 에러를 관리할 수 있습니다. </p>

<code>
$this->db->trans_start();<br />
$this->db->query('AN SQL QUERY...');<br />
$this->db->query('ANOTHER QUERY...');<br />
$this->db->trans_complete();<br />
<br />
if (<kbd>$this->db->trans_status()</kbd> === FALSE)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// generate an error... or use the log_message() function to log your error<br />
}
</code>


<h2>트랜잭션 활성화 Enabling Transactions</h2>

<p><dfn>$this->db->trans_start()</dfn>함수를 호출하면 트랜잭션은 자동으로 활성화 됩니다. 트랜잭션을 비활성화 시키고 싶다면 ,<dfn>$this->db->trans_off() </dfn>함수를 호출하시면됩니다. </p>

<code>
<kbd>$this->db->trans_off()</kbd><br /><br />

$this->db->trans_start();<br />
$this->db->query('AN SQL QUERY...');<br />
$this->db->trans_complete();
</code>

<p class="important">트랜잭션이 비활성화 되면,쿼리는 트랜잭션 없이 실행할때와 마찬가지로 자동 커밋 됩니다.</p>


<h2>테스트 모드 Test Mode</h2>

<p>트랜잭션을 "test mode"로 하면 쿼리는 정상적인 결과를 생성하더라도 모두 롤백됩니다. 테스트모드를 이용하려면, <dfn>$this->db->trans_start()</dfn> 함수의 첫번째 파라미터를 <samp>TRUE</samp>로 하시면됩니다. </p>

<code>
$this->db->trans_start(<samp>TRUE</samp>); // Query will be rolled back<br />
$this->db->query('AN SQL QUERY...');<br />
$this->db->trans_complete();
</code>


<h2>트랜잭션 수동으로 수행하기 Running Transactions Manually</h2>

<p>아래와같은 방법으로 트랜잭션을 수동처리 할수 있습니다:</p>

<code>
$this->db->trans_begin();<br /><br />

$this->db->query('AN SQL QUERY...');<br />
$this->db->query('ANOTHER QUERY...');<br />
$this->db->query('AND YET ANOTHER QUERY...');<br />

<br />

if ($this->db->trans_status() === FALSE)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$this->db->trans_rollback();<br />
}<br />
else<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$this->db->trans_commit();<br />
}<br />
</code>

<p class="important"><strong>Note:수동 트랜잭션시에는 </strong> <kbd>$this->db->trans_begin()</kbd> 함수를 사용해야 합니다. <strong></strong>
<dfn>$this->db->trans_start()</dfn>함수를 사용하지 않도록 주의하세요.</p>




</div>
<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp; <a href="fields.html">Field MetaData</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="table_data.html">Table Metadata</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>